package com.design.pattern.factory.method;

/**
 * @Description 工厂方法：进一步对简单工厂的封装，避免简单工厂的对修改也扩展
 * 雷锋案例
 *
 * 与简单工厂方法相比，不用更改工厂方法了，若是在以前增加一个优秀志愿者的话，需要修改工厂方法里的case
 * 现在只需要写一个优秀志愿者功能类继承雷锋类，然后写一个优秀志愿者的工厂类，该工厂类实现雷锋工厂，用来实例化优秀志愿者功能类对象，然后调用雷锋类（父类）的方法
 * 只需要在客户端修改用哪个功能类，而不用修改工厂类（对修改关闭）
 * 但是这种工厂方法会产生需要功能类和工厂类，后面用发射会更好
 * @author ll
 * @createTime 2021/6/1  22:00 
 */
public class Main {
	public static void main(String[] args) {
		//学雷锋
		Leifeng xueleifeng = new XueleifengFactory().createLeifeng();
		xueleifeng.sweep();
		xueleifeng.wash();
		xueleifeng.BuyRice();

		//社区志愿者
		Leifeng volunteer = new VolunteerFactory().createLeifeng();
		volunteer.sweep();
		volunteer.wash();
		volunteer.BuyRice();
	}
}
